package com.zhang.zxx.boot.common.other;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import lombok.extern.slf4j.Slf4j;
import lombok.var;

/**
 * PrefixSnowflakeIdGenerator:带前缀的雪花Id生成器
 *
 * @author zhangxiaoxiang
 * @date 2021年12月12日
 */
@Slf4j
public class PrefixSnowflakeIdGenerator implements IdentifierGenerator {
    public PrefixSnowflakeIdGenerator() {
        log.info("已启用[前缀雪花id生成器]");
    }

    @Override
    public Number nextId(Object entity) {
        return SnowflakeIdUtil.generateId();
    }

    @Override
    public String nextUUID(Object entity) {

        if (entity instanceof IdPrefix) {
            var v2 = (IdPrefix) entity;
            var sb = new StringBuilder();

            var prefix = v2.idPrefix();
            String idOverride = v2.idGenerateOverride();
            if (StrUtil.isNotBlank(prefix)) {
                sb.append(prefix);
                sb.append("-");
            }
            if (StrUtil.isNotBlank(idOverride)) {
                sb.append(idOverride);
            } else {
                sb.append(nextId(entity));
            }

            return sb.toString();
        }

        return nextId(entity).toString();
    }
}
